package net.siufung.mybatis.base;

import com.baomidou.mybatisplus.core.conditions.Wrapper;

import java.io.Serializable;
import java.util.List;
import java.util.Optional;

/**
 * @author 陈建峰
 * @since 2022/2/9 11:37 下午
 */
public interface BaseMapper<T>
	extends com.baomidou.mybatisplus.core.mapper.BaseMapper<T> {

	/**
	 * 通过Id查询对象,返回Optional<T>
	 * @param id 主键
	 * @return Optional<T>
	 */
	default Optional<T> queryById(Serializable id) {
		return Optional.ofNullable(this.selectById(id));
	};

	/**
	 * 通过条件构造器查询数量，返回Optional<Long>
	 * @param queryWrapper 条件构造器
	 * @return Optional<Long>
	 */
	default Optional<Long> queryCount(Wrapper<T> queryWrapper){
		return Optional.of(this.selectCount(queryWrapper));
	}

	/**
	 * 通过条件构造器查询集合，返回Optional<List<T>>
	 * @param queryWrapper 条件构造器
	 * @return Optional<List<T>>
	 */
	default Optional<List<T>> queryList(Wrapper<T> queryWrapper){
		return Optional.ofNullable(this.selectList(queryWrapper));
	}


}
